﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using DAO;
using Thefaceless;
using Microsoft.VisualBasic;


namespace Thefaceless
{
    public partial class FMain : Form
    {
        private String user;
        private String MaNV;
        private Boolean isAdmin = false;
        private String NgayHD;
        private String maHD;
        private string madu;
        private double giatien;
        private int Hienco;
        private int soluong;
        public FMain()
        {
           
            InitializeComponent();
        }

        //kiểm tra nhân viên đăng dặp có phải là ADMIN
        public FMain(String txtUser)
        {
            InitializeComponent();
            this.user = txtUser;
            DataProvider dp = new DataProvider();
            String sql = "select MaNV,ViTri from NHANVIEN where TenDN='" + user + "'";
            DataTable dt = dp.ExecuteQuery(sql);
            this.MaNV = dt.Rows[0][0].ToString();
            if (dt.Rows[0][1].ToString().Equals("ADMIN"))
                this.isAdmin = true;

            
        }

        //hàm nhúng fomr
        void nhung(Form f)
        {
            this.PMain.Controls.Clear();
            f.FormBorderStyle = FormBorderStyle.None;
            f.TopLevel = false;
            f.Visible = true;
            f.Dock = DockStyle.None;
            this.PMain.Controls.Add(f);
            this.PMain.Show();
        }

        //loguot
        private void btnLogout_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e)
        {
            this.Close();
        }


        private void btnHome_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e)
        {
            this.PMain.Controls.Clear();
            this.PMain.Controls.Add(this.pDrinks);
            this.PMain.Controls.Add(this.pOrder);
            this.PMain.Controls.Add(this.pTotal);
            this.loadDrinks();
        
        }

        //sự kiện đóng form
        private void FMain_FormClosing(object sender, FormClosingEventArgs e)
        {
            if (MessageBox.Show("Bạn chắc chắn muốn đăng xuất?", "Thông báo", MessageBoxButtons.OKCancel, MessageBoxIcon.Question)
                != System.Windows.Forms.DialogResult.OK)
                e.Cancel = true;
        }

        //nhúng form staffInfor
        private void btnListStaff_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e)
        {
            if (this.isAdmin == true)
            {
                FStaffInfo fs = new FStaffInfo(this.MaNV);
                nhung(fs);
            }
            else
            {
                MessageBox.Show("Bạn cần quyền admin để truy cập chức năng này");
               
            }
        }

        private void btnDelete_Click(object sender, EventArgs e)
        {

        }

        //nhúng form Dinks
        private void btnListDrinks_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e)
        {
            if (this.isAdmin == true)
            {
                FDrinks fd = new FDrinks();
                nhung(fd);
            }
            else
            {
                MessageBox.Show("Bạn cần quyền admin để truy cập chức năng này");

            }
        }

        //load danh sach đồ uống lên form dưới dạng các button
        private void loadDrinks()
        {
            this.FlowDrinks.Controls.Clear();
            DrinksDAO dr = new DrinksDAO();
            List<Drinks> drinkslist = new List<Drinks>();
            if (this.txtValues.Text == "")
            {
                drinkslist = dr.LoadDrinksList();
            }
            else
            {
                drinkslist = dr.LoadDrinksList(this.txtValues.Text);
            }
            foreach (Drinks item in drinkslist)
            {
                Button btn = new Button()
                {
                    Width = dr.DrinksWitdh,
                    Height = dr.DrinksHeight
                };
                btn.Text = item.getTenDU() + Environment.NewLine + "(" + item.getSoLuong() + ")";
                btn.Image = global::Thefaceless.Properties.Resources.drink_2_icon;
                btn.ForeColor = Color.Black;
                //bắt sự kiện click cho các button
                btn.Click += btn_Click;
                btn.Tag = item;
                this.FlowDrinks.Controls.Add(btn);

            }
        }

        private void FMain_Load(object sender, EventArgs e)
        {
            this.listOrder.Items.Clear();
            loadDrinks();
        }

        //click các button đồ uống
        private void btn_Click(object sender, EventArgs e)
        {
            DrinksDAO dr = new DrinksDAO();
            List<Drinks> ld = dr.LoadDrinksList();
            //lấy tên đồ uống
            string DrinksName = ((sender as Button).Tag as Drinks).getTenDU();
            int x;
            int sl =0;
            //hiện form nhập số lượng
            do
            {
                FInput fi = new FInput();
                fi.ShowDialog();
                x = fi.soluong;
                
                foreach (Drinks items in ld)
                {
                    if (DrinksName.Equals(items.getTenDU()))
                    {
                        Hienco = items.getSoLuong();
                        for (int i = 0; i < this.listOrder.Items.Count; i++)
                        {
                            if (DrinksName.Equals(this.listOrder.Items[i].SubItems[0].Text))
                            {
                                //lấy tổng số lượng order
                                sl = int.Parse(this.listOrder.Items[i].SubItems[1].Text) + x;
                            }
                        }
                        if (x > Hienco || sl > Hienco)
                            MessageBox.Show("So luong khong du,vui long nhap lai");
                    }
                }
            } while (x > Hienco || sl> Hienco);

            if (x != 0)
            {
                Boolean isHave = false;
                //duyệt trong danh sach đồ uống để lấy Tên đồ uống,số lượng và giá tiền
                foreach (Drinks items in ld)
                {
                    if (DrinksName.Equals(items.getTenDU()))
                    {
                        for (int i = 0; i < this.listOrder.Items.Count; i++)
                            //kiểm tra xem món vừa gọi đã có trong bill chưa
                            if (DrinksName.Equals(this.listOrder.Items[i].SubItems[0].Text))
                            {
                                isHave = true;
                                //có trong bill thì tăng số lượng + giá tiền lên
                                this.listOrder.Items[i].SubItems[1].Text = (int.Parse(this.listOrder.Items[i].SubItems[1].Text) + x).ToString();
                                this.txtTotal.Text = (int.Parse(this.txtTotal.Text) + x * items.getGiaTien()).ToString();
                                this.listOrder.Items[i].SubItems[3].Text = (int.Parse(this.listOrder.Items[i].SubItems[1].Text) * items.getGiaTien()).ToString();
                            }
                        //chưa có thì thêm vào bill
                        if (isHave == false)
                        {
                            ListViewItem Ten = new ListViewItem(items.getTenDU(), 0);
                            ListViewItem.ListViewSubItem SoLuong = new ListViewItem.ListViewSubItem(Ten, x.ToString());
                            ListViewItem.ListViewSubItem Gia = new ListViewItem.ListViewSubItem(Ten, items.getGiaTien().ToString());
                            double total = x * items.getGiaTien();
                            this.txtTotal.Text = (int.Parse(txtTotal.Text) + total).ToString();
                            ListViewItem.ListViewSubItem Tong = new ListViewItem.ListViewSubItem(Ten, total.ToString());
                            Ten.SubItems.Add(SoLuong);
                            Ten.SubItems.Add(Gia);
                            Ten.SubItems.Add(Tong);
                            listOrder.Items.Add(Ten);
                        }
                    }
                }
            }
        
   
            
        }

        
        private void btnCancel_Click(object sender, EventArgs e)
        {
            this.listOrder.Items.Clear();
            this.txtTotal.Text = "0";
        }

        //mở form thống kê doanh thu
        private void btnRevenue_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e)
        {
            if (this.isAdmin == true)
            {
                FRevenue fb = new FRevenue();
                nhung(fb);
            }
            else
            {
                MessageBox.Show("Bạn cần quyền admin để truy cập chức năng này");

            }
        }

        //danh sach hóa đơn
        private void btnExchange_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e)
        {
                FBill fb = new FBill();
                nhung(fb);
        }

        //set mã hóa đơn
        private int IdRecord()
        {
            DataProvider dp = new DataProvider();
            string sql = "select * from HOADON";
            DataTable dt = dp.ExecuteQuery(sql);
            int max = 0;
            for (int i = 0; i < dt.Rows.Count; i++)
                if (max < int.Parse(dt.Rows[i][0].ToString()))
                    max = int.Parse(dt.Rows[i][0].ToString());
            return max + 1;
        }

        //thêm hóa đơn vào csdl
        private void addRecord()
        {
            DataProvider dp = new DataProvider();
            Bill bill = new Bill();
            maHD = IdRecord().ToString();
            bill.setMaHD(maHD);
            string dd = DateTime.Now.ToString().Trim().Substring(0, 2);
            string mm = DateTime.Now.ToString().Trim().Substring(3, 2);
            string year = DateTime.Now.ToString().Trim().Substring(6, 4);
            this.NgayHD = year + "-" + mm + "-" + dd;
            string sqlHD = "insert into HOADON values ('" + bill.getMaHD() + "','" + MaNV + "','" + NgayHD + "','" + this.txtTotal.Text + "')";
            dp.ExecuteQuery(sqlHD);
        }

        //thêm chi tiết hóa đơn vào csdl
        private void addDetail()
        {
            DrinksDAO drd = new DrinksDAO();
            List<Drinks> list = drd.LoadDrinksList();
            DataProvider dp = new DataProvider();
            for(int i=0;i<this.listOrder.Items.Count;i++)
            {
                foreach (Drinks items in list)
                { 
                    if (this.listOrder.Items[i].SubItems[0].Text.Equals(items.getTenDU()))
                    {
                        madu = items.getMaDU().ToString();
                        giatien = items.getGiaTien();
                        Hienco = items.getSoLuong();
                    }
                }
                //thêm chi tiết hoa đơn
                string sql = "insert into CHITIETHOADON values('" + maHD + "','" + madu + "','" + this.listOrder.Items[i].SubItems[1].Text
                    + "','" + giatien + "','" + this.listOrder.Items[i].SubItems[3].Text + "')";
                dp.ExecuteQuery(sql);
                soluong = Hienco - int.Parse(this.listOrder.Items[i].SubItems[1].Text);
                //cập nhập lại số lượng của đồ uống
                string sqlUpdate = "update DANHMUCDOUONG set SoLuong = '" + soluong + "' where MaDoUong = '" + madu + "'";
                dp.ExecuteQuery(sqlUpdate);
            }
        }

        //thanh toán
        private void btnPay_Click(object sender, EventArgs e)
        {
            if (MessageBox.Show("Thực hiện thanh toán này?", "Thông báo", MessageBoxButtons.OKCancel, MessageBoxIcon.Question)
                == DialogResult.OK)
            {
                addRecord();
                addDetail();
                this.listOrder.Items.Clear();
                this.txtTotal.Text = "0";
                //load lại danh sách đồ uống
                loadDrinks();
                // in hóa đơn
                FrpBill frp = new FrpBill(this.maHD);
                frp.Show();

            }
        }

        private void btnInfoStaff_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e)
        {
            FInfo f = new FInfo(this.MaNV);
            nhung(f);
        }

        private void btnSystem_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e)
        {
            FInfoSoftware f = new FInfoSoftware();
            nhung(f);
        }

        private void btnRemove_Click(object sender, EventArgs e)
        {
            //kiểm tra xem có bao nhiều item được chọn
            for(int i=listOrder.SelectedIndices.Count-1;i>=0;i--)
            {
                //trừ tiền
                this.txtTotal.Text = (int.Parse(this.txtTotal.Text) - int.Parse(this.listOrder.Items[i].SubItems[3].Text)).ToString();
                //xóa items
                this.listOrder.Items.RemoveAt(this.listOrder.SelectedIndices[i]);
            }
        }

        //tìm kiếm đồ uống
        private void btnSearch_Click(object sender, EventArgs e)
        {
            this.FlowDrinks.Controls.Clear();
            loadDrinks();
        }

        //hủy tìm kiếm
        private void btnCancelValues_Click(object sender, EventArgs e)
        {
            this.txtValues.Text = "";
            this.FlowDrinks.Controls.Clear();
            loadDrinks();
        }
    }
}
